/*
 * Copyright (c) 2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef RENDER_SERVICE_CLIENT_CORE_MODIFIER_NG_GEOMETRY_RS_BOUNDS_CLIP_MODIFIER_H
#define RENDER_SERVICE_CLIENT_CORE_MODIFIER_NG_GEOMETRY_RS_BOUNDS_CLIP_MODIFIER_H

#include "modifier_ng/rs_modifier_ng.h"
#include "render/rs_path.h"

namespace OHOS::Rosen::ModifierNG {
class RSC_EXPORT RSBoundsClipModifier : public RSModifier {
public:
    RSBoundsClipModifier() = default;
    ~RSBoundsClipModifier() = default;

    static inline constexpr auto Type = RSModifierType::CLIP_TO_BOUNDS;
    RSModifierType GetType() const override
    {
        return Type;
    }

    void MarkNodeDirty() override
    {
        if (auto node = node_.lock()) {
            node->MarkDirty(NodeDirtyType::APPEARANCE, true);
        }
    }

    void SetClipRectWithRadius(const Vector4f& clipRect, const Vector4f& clipRadius);
    void SetClipRRect(const std::shared_ptr<RRect>& rrect);
    void SetClipBounds(const std::shared_ptr<RSPath>& clipToBounds);
    void SetClipToBounds(bool clipToBounds);
    void SetCornerRadius(const Vector4f& cornerRadius);
    Vector4f GetCornerRadius() const;
    void SetCornerApplyType(RSCornerApplyType type);
    RSCornerApplyType GetCornerApplyType() const;
};
} // namespace OHOS::Rosen::ModifierNG
#endif // RENDER_SERVICE_CLIENT_CORE_MODIFIER_NG_GEOMETRY_RS_BOUNDS_CLIP_MODIFIER_H
